package client.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;

/**
 * defini les classes a implementer pour la table de jeu
 */
@SuppressWarnings("serial")
abstract class ITableDeJeu extends JLabel implements ActionListener {

	/**
	 * permet de pouvoir choisir la chaise si elle est pas deja prise
	 * 
	 * @param choisir
	 *            permet d'activer la possibilite de choisir ou desactive cette
	 *            possibilite
	 */
	public abstract void setChoixChaise(boolean choisir);

	/**
	 * permet de mettre les infos du joueur
	 * 
	 * @param NoChaise
	 *            est le No de la chaise
	 * 
	 * @param nom
	 *            est le pseudo du joueur(nom a "" pour liberer la chaise)
	 * @param montant
	 *            est l'argent qu'il a
	 */
	public abstract void setChaiseInfos(int NoChaise, String nomJoueur,
			double montant);

	/**
	 * permet d'afficher ou cacher le montant mise
	 * 
	 * @param NoChaise
	 *            est le No de la chaise
	 * 
	 * @param montant
	 *            est le montant mise
	 * @param visible
	 *            permet de l'afficher ou non
	 */
	public abstract void setMontantMise(int NoChaise, double montant,
			boolean visible);

	/**
	 * permet d'afficher le jeton du dealer devant une chaise
	 * 
	 * @param NoChaise
	 *            est le no de la chaise du dealer
	 */
	public abstract void setDealer(int NoChaise);

	/**
	 * permet de definir sur quelle chaise le joueur a clique pour s'asseoir et
	 * de transmettre l'info a la fenetre
	 */
	public abstract void actionPerformed(ActionEvent e);

	/**
	 * permet de montrer le flop
	 * 
	 * @param carte1
	 *            est le nom de la 1ere carte
	 * @param carte2
	 *            est le nom de la 2emme carte
	 * @param carte3
	 *            est le nom de la 3emme carte
	 */
	public abstract void setFlop(String carte1, String carte2, String carte3);

	/**
	 * permet de montrer la turn
	 * 
	 * @param carte4
	 *            est le nom de la 4emme carte
	 */
	public abstract void setTurn(String carte4);

	/**
	 * permet de montrer la river
	 * 
	 * @param carte5
	 *            est le nom de la 5emme carte
	 */
	public abstract void setRiver(String carte5);

	/**
	 * permet d'enlever de la table les cartes du flop,turn et river
	 */
	public abstract void retirerCartes();

	/**
	 * permet d'afficher les cartes d'un joueur
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 * @param carte1
	 *            est le nom de la carte 1
	 * @param carte2
	 *            est le nom de la carte 2
	 */
	public abstract void setCartesJoueur(int NoJoueur, String carte1,
			String carte2);

	/**
	 * permet d'afficher les cartes d'un joueur et de mettre pour tous les
	 * autres joueurs dans la partie le dos des cartes
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 * @param carte1
	 *            est le nom de la carte 1
	 * @param carte2
	 *            est le nom de la carte 2
	 */
	public abstract void setCartesJoueurAutomatique(int NoJoueur,
			String carte1, String carte2);

	/**
	 * permet de retirer les cartes d'un joueur
	 * 
	 * @param NoJoueur
	 *            est le joueur en question
	 */
	public abstract void retirerCartesJoueur(int NoJoueur);

	/**
	 * permet de retirer toutes les cartes des joueurs
	 */
	public abstract void retirerToutesLesCartesJoueur();

	/**
	 * permet de reinitialiser les montants mise
	 */
	public abstract void tourTermine();

	/**
	 * permet d'afficher le montant mise
	 * 
	 * @param noChaise
	 *            est le no du joueur
	 * @param montant
	 *            est le montant mise
	 */
	public abstract void setMontantRestant(int noChaise, double montant);

	/**
	 * permet de modifier et d'afficher le pot
	 * 
	 * @param pot
	 *            est le montant du pot
	 * @param visible
	 *            true pour afficher le pot
	 */
	public abstract void setPot(double pot, boolean visible);

	/**
	 * permet de mettre sur le joueur l'action faite
	 * 
	 * @param NoChaise
	 *            est le no du joueur
	 * @param action
	 *            est l'action a afficher
	 */
	public abstract void setAction(int noChaise, String action);

	/**
	 * permet de savoir combien il y a de cartes sur la table
	 * 
	 * @return le nombre de cartes qu'il y a sur la table
	 */
	public abstract int getNbCartes();

}
